// 行者注册云函数
"use strict";

const db = uniCloud.database();
const usersCollection = db.collection("users");
const crypto = require("crypto");

// 生成随机行者ID
function generateUserId() {
  const timestamp = Date.now().toString().substring(6); // 取时间戳的部分
  const random = Math.floor(Math.random() * 10000)
    .toString()
    .padStart(4, "0"); // 随机4位数字
  return `W${timestamp}${random}`;
}

exports.main = async (event, context) => {
  try {
    const { phone, nickname, gender = 0, code } = event;

    // 参数验证
    if (!phone) {
      return {
        code: -1,
        message: "手机号不能为空",
      };
    }

    // 在实际项目中，这里应该验证短信验证码
    // 此处简化处理，仅验证用户是否已存在

    // 检查用户是否已存在
    const existingUser = await usersCollection
      .where({
        phone,
        user_type: "walker",
      })
      .get();

    if (existingUser.data && existingUser.data.length > 0) {
      return {
        code: -2,
        message: "该手机号已注册",
      };
    }

    // 生成行者ID
    const userId = generateUserId();

    // 当前时间戳
    const now = Date.now();

    // 创建用户数据
    const userData = {
      userId, // 行者ID
      phone, // 手机号
      nickname: nickname || `行者${userId.substring(userId.length - 4)}`, // 昵称，如果未提供则生成默认昵称
      gender: parseInt(gender), // 性别：0-未知，1-男，2-女
      user_type: "walker", // 用户类型：行者
      status: 1, // 状态：1-正常
      register_date: now, // 注册时间
      last_login_date: now, // 最后登录时间，初始为注册时间
    };

    // 添加到数据库
    const insertResult = await usersCollection.add(userData);

    if (insertResult.id) {
      // 为了安全，返回的用户信息中不包含敏感字段
      const userInfo = {
        _id: insertResult.id,
        userId: userData.userId,
        nickname: userData.nickname,
        phone: userData.phone,
        gender: userData.gender,
        status: userData.status,
        register_date: userData.register_date,
        last_login_date: userData.last_login_date,
      };

      return {
        code: 0,
        message: "注册成功",
        data: {
          userInfo,
        },
      };
    } else {
      return {
        code: -3,
        message: "注册失败",
      };
    }
  } catch (error) {
    console.error("行者注册失败:", error);
    return {
      code: -4,
      message: "注册失败: " + error.message,
    };
  }
};
